#include <REGX52.H>
#include<INTRINS.h>
#include"Timer.h"
#include"Key.h"
unsigned char KeyNum;
unsigned char LedMove;
//配置定时器寄存器
void Timer0_Init();
////    TMOD = 0x01; // 0000 0001 选择定时器0模式1（16位）	
//	//不改变另外一个定时器
//		TMOD=TMOD&0xF0;//低4位清零，高4位不变
//	  TMOD=TMOD|0x01;//选择T0模式1
//    //配置定时器控制寄存器
//    TF0 = 0; // 定时器T0溢出中断标志
//    TR0 = 1; // 当GATE=0时，只有TR0等于1时，允许T0定时器计数
//    //16位定时器（用于储存定时器初始值/当前值）
//    TH0 = (65536 - 1000) / 256; // 高8位
//    TL0 = (65536 - 1000) % 256; // 低8位
//	//为什么是65536：到65535后要再来一个脉冲，到65536才溢出
//	
//	//一个8位寄存器只能储存256
//	//类比十进制 将123储存在2个只能储存0-99的寄存器中
//	//						123/100=1    123%100=23

//	//寄存器储存大小：0~65535
//	//每隔1us计数加1
//	//总共定时时间65535us
//	//64535离计数器溢出差值1000，所以计时时间为1ms
//    
//    //配置中断寄存器
//    ET0 = 1;  // 开启定时器0中断
//    EA = 1;   // 开启总中断
//    PT0 = 0;  // 设置定时器0中断优先级为低，默认值为0

void main()
{
    //初始化定时器
    Timer0_Init();
		P2=0xFE;
    while (1)
    { 
			KeyNum=Key();
			//按下按键
			if(KeyNum)
			{
				if(KeyNum==1)
				{
					LedMove++;
					if(LedMove>1)
					{
						LedMove=0;
					}
				}
			}
    }
}

//溢出后，中断执行的任务（中断函数）
void Timer0_Routine() interrupt 1
{	
		// 用于计数1秒
		static unsigned int T0count; //局部静态变量（只能在本函数使用）
    // 重新装载初始值
   TH0 = (65536-1000)/256;		//设置定时初值
	 TL0 = (65536-1000)%256;		//设置定时初值
    
    // 1秒定时逻辑
    T0count++;
    if(T0count == 500)  // 1000ms = 1s
    {		
				//左移
				if(LedMove==0)
				{
					P2=_crol_(P2,1);
				}
				else if(LedMove==1)
				{
					P2=_cror_(P2,1);
				}
        T0count = 0;
    }
}

//void Timer0_Routine() interrupt 1
//{
//	static unsigned int T0Count;
//	TL0 = 0x18;		//设置定时初值
//	TH0 = 0xFC;		//设置定时初值
//	T0Count++;		//T0Count计次，对中断频率进行分频
//	if(T0Count>=500)//分频500次，500ms
//	{
//		T0Count=0;
//		if(LedMove==0)			//模式判断
//			P2=_crol_(P2,1);	//LED输出
//		if(LedMove==1)
//			P2=_cror_(P2,1);
//	}
//}
